#ifndef _SDLNIVEAU_H_
#define _SDLNIVEAU_H_

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>

#include "Niveau.h"

/** @brief File brief description
    Le fichier sdlNiveau.h contient la déclaration de toutes procédures nécessaires pour l'affichage du jeu
    en mode SDL*/

/** @brief La structure sdlNiveau comporte un niveau qui contient tous éléments nécessaires pour jouer 
 * (heros, ennemis, terrain, bonus et boss) et les SDL_Surface correspondant (chaque SDL_Surface est destinée
    à accueillir un sprite)*/
typedef struct
{
	Niveau niveau;
	SDL_Surface* surface_ecran;
	SDL_Surface* surface_heros;
	SDL_Surface* surface_ennemi1;	
	SDL_Surface* surface_ennemi2;	
	SDL_Surface* surface_ennemi3;
	SDL_Surface* surface_ennemi4;
	SDL_Surface* surface_tir_ennemi_1;
	SDL_Surface* surface_tir_heros;
	SDL_Surface* surface_tir_heros_S1;
	SDL_Surface* surface_tir_heros_S2;
	SDL_Surface* surface_bonus1;
	SDL_Surface* surface_bonus2;
	SDL_Surface* surface_bonus3;
	SDL_Surface* surface_boss;
	SDL_Surface* surface_poireau;
} sdlNiveau;


/** @brief Cette procedure permet d'initialiser un sdlNiveau. Dans un premier temps le champ niveau est initialisé
 *  grâce à un niveau crée par une fonction du module Niveau.c. Ensuite on associe un sprite au heros, aux ennemis,
 *  aux tirs etc... C'est dans cette procédure qu'on initalise SDL et TTF.
 *  @param [in,out] pSdlNiveau
    @return none*/
void sdlNiveauInit(sdlNiveau* pSdlNiveau);


/** @brief Une fois les éléments initialisés il faut définir quoi afficher et comment l'affichage doit s'effectuer,
 *  à quelle position. C'est le rôle de la procédure sdlNiveauAff.
 *  @param [in,out] pSdlNiveau
    @return none*/
void sdlNiveauAff(sdlNiveau* pSdlNiveau);


/** @brief Le jeu évolue en permanence aussi bien indépendemment des actions du joueur ( les ennemis bougent tout le temps, 
 *  ils tirent sur le heros etc..) que grâce aux événements qu'il génère (déplacements ou tirs du heros).
 *  La procédure sdlNiveauBoucle gère cette évolution constante et adapte l'affichage en conséquence.
 *  @param [in,out] pSdlNiveau
    @return none*/
void sdlNiveauBoucle(sdlNiveau* pSdlNiveau);

#endif
